Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Pomoc w zadaniu


Rekomendowane odpowiedzi

Opublikowano

Witam

Mam problem z programowaniem i muszę rozwiązać kilka zadań. Jeśli ktoś pomoże będę wdzięczny.

Oto jedno z nich:

 

Napisz program w oparciu o funkcje, który:
a) uzupełni tablicę n-elementową wartościami losowymi od 1 do 50,
b )wypisze zawartość tablicy, umieszczając wartości po przecinku
c) wypisze średnią arytmetyczną z liczb dwucyfrowych, które występują w tablicy
Opublikowano

Nudzi mi się, to masz:

 

 

 

 

#include <iostream>
#include <ctime>
#include <cstdlib>

int main()
{
	srand(static_cast<unsigned int>(time(NULL))); //inicjalizacja generatora liczb pseudo-losowych, static_cast dla kompilatora

	int size;
	std::cout << "Podaj wielkosc tablicy: ";
	std::cin >> size;

	int* tablica = new int[size]; //stworzenie tablicy

	for (int i = 0; i < size; i++) //wypełnienie tablicy
		tablica[i] = (rand() % 50) + 1;

	//wypisanie tablicy
	for (int i = 0; i < size; i++)
		std::cout << tablica[i] << (i == size - 1 ? "\n" : ", "); //(użyłem krótkiego ifa, żeby uniknąć wypisania przecinka po ostatniej liczbie)

	//obliczenie i wypisanie średniej
	float srednia = 0; //float, by zapobiec utracie przecinka
	int liczby = 0;
	for (int i = 0; i < size; i++)
		if (tablica[i] >= 10) { //jeśli liczba jest większa lub równa 10 (dwucyfrowa)
			srednia += static_cast<float>(tablica[i]); liczby++; //dodaj ją do sumy liczb i zwiększ licznik liczb o 1 (static_cast dla kompilatora)
		}
	srednia /= liczby; //oblicz średnią
	std::cout << "Srednia z liczb dwucyfrowych wynosi: " << srednia << std::endl;

	//oczekiwanie na klawisz
	std::cin.ignore();
	std::cin.get();
	return 0;
}
w 90% zgodne ze standardem C++11 (ten rand() można by było zamienić na std::random, ale bez przesady) i bez żadnych warningów

 

@Szymon2727 założymy się? to spójrz w mój kod.

 

//edit - nie doczytałem "w oparciu o funkcje", moment xD

846331404756772371599.jpeg
Opublikowano
Nie ma czegoś takiego takiego jak tablica n-elementowa, zawsze to musi być stała. Ewentualnie można dać jej ogromny rozmiar.

 

???

 

Na tym forum jest więcej gówna, któro trzeba naprawiać niż właściwych informacji...

 

 

I tak było od zawsze. Przywróćcie proszę minusy albo dawajcie warny czy coś za szerzenie herezji.

 

Opublikowano

Nie ma czegoś takiego takiego jak tablica n-elementowa, zawsze to musi być stała. Ewentualnie można dać jej ogromny rozmiar.

Chodzi ci w o to, że w Visualu nie przejdzie taki kod, a w C::B już tak?

Bo nie za bardzo rozumiem.

int cos;
std::cin >> cos;
int tablica[cos];

//ten kod jest niepoprawny, ale w C::B przejdzie bo kompilator w C::B nada tablicy wlasny rozmiar.

TuByłaSygnatura.png

Opublikowano

 

 

@mini1194 zaraz ci przerobię

Jeśli możesz zrób to w najłatwiejszy możliwy sposób bo ja dopiero jestem w technikum i niektóre rzeczy to pierwszy raz na oczy widzę ;p

Ale dzięki że pomagasz

Opublikowano

#include <iostream>
#include <ctime>
#include <cstdlib>

float oblicz_srednia(int* tablica, int rozmiar)
{
	float srednia = 0; //float, by zapobiec utracie przecinka
	int liczby = 0;
	for (int i = 0; i < rozmiar; i++)
		if (tablica[i] >= 10) { //jeśli liczba jest większa lub równa 10 (dwucyfrowa)
			srednia += static_cast<float>(tablica[i]); liczby++; //dodaj ją do sumy liczb i zwiększ licznik liczb o 1 (static_cast dla kompilatora)
		}
	srednia /= liczby; //oblicz średnią
	return srednia;
}

void wypelnij_tablice_losowo(int tablica[], int rozmiar, int min, int max)
{
	for (int i = 0; i < rozmiar; i++) //wypełnienie tablicy
		tablica[i] = (rand() % max) + min;
}

int main()
{
	srand(static_cast<unsigned int>(time(NULL))); //inicjalizacja generatora liczb pseudo-losowych, static_cast dla kompilatora

	int size;
	std::cout << "Podaj wielkosc tablicy: ";
	std::cin >> size;

	int* tablica = new int[size]; //stworzenie tablicy

	wypelnij_tablice_losowo(tablica, size, 1, 50);

	//wypisanie tablicy
	for (int i = 0; i < size; i++)
		std::cout << tablica[i] << (i == size - 1 ? "\n" : ", "); //(użyłem krótkiego ifa, żeby uniknąć wypisania przecinka po ostatniej liczbie)

	//obliczenie i wypisanie średniej
	float srednia = oblicz_srednia(tablica, size);
	std::cout << "Srednia z liczb dwucyfrowych wynosi: " << srednia << std::endl;

	//oczekiwanie na klawisz
	std::cin.ignore();
	std::cin.get();
	delete[] tablica;
	return 0;
}
niestety, nic w życiu nie jest proste xD

Jak czegoś nie rozumiesz w moim kodzie to pisz, chętnie wytłumaczę.

 

btw: też jestem w technikum.­

 

@1373230489-U611928.pngVereX. jeszcze jedno, tak, pisałem w VS (Visual C++), ale w Code::Blocks (GCC) też ten trick przejdzie, standard kodu się nie zmienia. Odróżniaj kompilatory od środowisk, plz.

846331404756772371599.jpeg
Opublikowano

@1373230489-U611928.pngVereX.

to nie jest poprawny kod C++

Wiem, że nie jest, może źle się wypowiedziałem, ale chodzi o to, że ci co zaczynają myślą, że w taki prosty sposób zarezerwują sobie pamięć dla tablicy.

Za szybko pisałem, bo gra mnie goni, to mogłem coś źle napisać :P

 

@mini1194 zaraz ci przerobię

 

@1373230489-U611928.pngVereX. poczytaj o dynamicznym alokowaniu pamięci i o "new"­

Przecież rozumiem ;(

TuByłaSygnatura.png

Opublikowano

No to ja już mam mózg rozjebany:

 

http://cpp0x.pl/#/kursy/?nro=292


Uwaga!
Tworząc tablicę za pomocą powyższego zapisu należy pamiętać, że liczba_elementow musi być wartością stałą, która będzie znana w chwili kompilacji programu. Oznacza to, że użytkownik nie może określać rozmiaru tablicy w trakcie działania aplikacji (wspomniane ograniczenie dotyczy tylko i wyłącznie tablicy tworzonej w powyższy sposó. Poniższy kod prezentuje nieprawidłowe tworzenie tablicy, którego nie można stosować w kodzie.
C/C++
//UWAGA! Ten przykład pokazuje jak NIE NALEŻY tworzyć tablicy.
int iloscElementow;
std::cin >> iloscElementow;
int tablica[ iloscElementow ]; //TEN ZAPIS JEST NIEPRAWIDŁOWY! Nie można używać zmiennej do tworzenia tablicy. Można użyć natomiast stałej.
Wiedz również, że w dalszej części kursu poznasz znacznie ciekawsze metody tworzenia tablic, w tym również takich, których rozmiar będzie mógł być określany przez użytkownika w trakcie działania aplikacji.

pyhvh7E.png


 


Opublikowano

 

których rozmiar będzie mógł być określany przez użytkownika w trakcie działania aplikacji.

 

#BezKomentarza

Czytaj dalej kurs, bo jeszcze do tego tematu najwidoczniej nie doszedłeś.

 

@Phoenix_PL

Najwidoczniej zaszło nieporozumienie, bo ja już nie wiem o czym piszesz.

Nawet już nie wiem o który trick ci chodzi.

Mój post nie był do ciebie, nigdzie się do ciebie nie odniosłem.

TuByłaSygnatura.png

Opublikowano

@NopeDotAvi2 shh, to tylko malutki memory leak

 

@Szymon2727

Tworząc tablicę za pomocą powyższego zapisu

słowo klucz, powyższego zapisu.

 

operator "new" alokuje określoną ilość pamięci dla tablicy. Mniej-więcej jakby zrobić w C takie coś:

#include <stdio.h>
#include <stdlib.h>

int main()
{
	int wielkosc = 20; //podana przez usera wielkosc
	int *tablica;
	tablica = (int*)malloc(wielkosc*sizeof(int));

	for (int i = 0; i < wielkosc; i++)
		tablica[i] = i;

	for (int i = 0; i < wielkosc; i++)
		printf("%d -> %d\n", i, tablica[i]);

	getchar();
}
Jak chcemy zmniejszyć/zwiększyć tablicę, używamy realloc(), jak chcemy zwolnić pamięć to używamy free()
846331404756772371599.jpeg
Opublikowano

#BezKomentarza

Czytaj dalej kurs, bo jeszcze do tego tematu najwidoczniej nie doszedłeś.

 

Doszedłem i to dawno temu.

 

Czyli nie chodzi o to, że jest to błędne, a tylko niepoprawne?

 

Bo z czego to widzę to ten ,, niepoprawny '' kod niczym się nie różni od Twojego.

pyhvh7E.png


 


Opublikowano

Doszedłem i to dawno temu.

 

Czyli nie chodzi o to, że jest to błędne, a tylko niepoprawne?

 

Bo z czego to widzę to ten ,, niepoprawny '' kod niczym się nie różni od Twojego.

Jest to błędne, w Visualu ci nie skompiluje, a w C::B (chyba) da ci jakiś wielki rozmiar tablicy.

TuByłaSygnatura.png

Opublikowano

Jest to błędne, w Visualu ci nie skompiluje, a w C::B (chyba) da ci jakiś wielki rozmiar tablicy.

 

Tworzy dokładnie taką tablicę jaką określi użytkownik (no chyba, że jest minimalna szansa na inny rozmiar). Nie mniej, dzięki.

pyhvh7E.png


 


Opublikowano

Stworzonej tablicy przy użyciu new, nie powinno sie usuwać ? Też się dopiero ucze  :)

wszystko co stworzyło się za pomocą new powinno się usuwać, tablice też, stąd mój post wyżej.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...